//题目描述
//给定一个整数n，求[1, n]的所有质数。
//输入格式
//一个整数n。(1≤n≤2×10^6)
//输出格式
//按照从小到大的顺序输出答案。
//样例输入1
//19
//样例输出1
//2 3 5 7 11 13 17 19
//欧拉筛模板
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e6 + 9;
bitset<N>vis;//存的是二进制，一般来说是布尔值
vector<ll>p;
int main() {
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	int n; cin >> n;
	vis[0] = vis[1] = true;// 当set中的值为true表示的是该数不是质数
	for (int i = 2; i <= n; i++) {
		if (!vis[i]) {
			p.push_back(i);//i是质数
		}
		for (int j = 0; j < p.size() && p[j] * i <= n; j++) {
			vis[p[j] * i] = true;
			if (i % p[j] == 0)break;
			//if (i % primes[j] == 0) break 确保合数 primes[j] * i 仅被其最小质因数 primes[j] 标记。
		}
	}
	for (int i = 1; i <= n; i++)if (!vis[i])cout << i << ' ';
	return 0;
}